package com.cjack.frenchexcel.util;

import com.alibaba.fastjson.JSON;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.regex.Pattern;

/**
 * Created by root on 5/15/19.
 */
public class CustomerStringUtil {

    /**
     * 拼接字符串，用[joinStrs]替换字符串里面的{n}占位符里面的内容，n从0开始
     * @param str
     * @param joinStrs
     * @return
     */
    public static String handleStrJoin( String str, String [] joinStrs){
        if( str == null || str.equals( "")){
            return str;
        }
        if( joinStrs == null || joinStrs.length == 0){
            return str;
        }
        for( int i =0; i < joinStrs.length ; i++){
            //这里可能会有性能问题
            str = str.replace( "{" + i + "}", joinStrs[i]);
        }
        return str;
    }

    public static String randomStr( int len){
        StringBuffer buffer = new StringBuffer( "0123456789abcdefghijklmnopqrstuvwxyz");
        StringBuffer sb = new StringBuffer();
        Random r = new Random();
        int range = buffer.length();
        for ( int i = 0; i < len; i ++){
            sb.append( buffer.charAt( r.nextInt( range)));
        }
        return sb.toString();
    }

    /**
     * 年后两位，月两位
     * @return
     */
    public static String sendGoodsNoProfix(){
        return DateFormatUtil.format( new Date(), DateFormatUtil.DATE_RULE_4);
    }

    /**
     * 年后两位，月两位
     * @return
     */
    public static String cloudDiskNoProfix(){
        return DateFormatUtil.format( new Date(), DateFormatUtil.DATE_RULE_10);
    }

    /**
     * 处理发货编号转成4位，需要补全
     * @return
     */
    public static String sendGoodsNumber( Integer number){
        if( number == null){
            number = 0;
        }
        if( number < 10){
            return "000" + number;
        }else if( number < 100){
            return "00" + number;
        }else if( number < 1000){
            return "0" + number;
        }else{
            return "" + number;
        }
    }

    /**
     * 比较两个字符串是否相等
     * @param str1
     * @param str2
     * @return
     */
    public static boolean compareStr( String str1, String str2){
        if( str1 == null){
            if( str2 == null){
                return true;
            }
            return false;
        }
        return str1.equals( str2);
    }

    /**
     * 判断字符串是否是 数字字符串
     * @return
     */
    public static boolean isNumber( String str){
        Pattern pattern = Pattern.compile( "^[-\\+]?[\\d]*$");
        return pattern.matcher( str).matches();
    }

    /**
     * 生成订单号 32位随机字符串+员工表id
     * @return
     */
    public static String getOrderNo( Long adminUserId){
        return (randomStr( 16) + adminUserId).toUpperCase();
    }

    public static boolean isEmptyOrZero( String str){
        return StringUtils.isEmpty( str) || str.equals( "0");
    }

    public static int emptyOrZeroCount( String... strs){
        if( strs == null){
            return 0;
        }
        int c = 0;
        for( String str : strs){
            if( !isEmptyOrZero( str)){
                c++;
            }
        }
        return c;
    }

    public static String randomJobNum(){
        Random r = new Random();
        Integer length = r.nextInt( 20);

        StringBuffer buffer = new StringBuffer( "123456789ABCDEFGHIJKLMNOPQUOXYZ");
        StringBuffer sb = new StringBuffer();
        int range = buffer.length();
        for ( int i = 0; i < length; i ++){
            sb.append( buffer.charAt( r.nextInt( range)));
        }
        return sb.toString();
    }



    public static String calculateMultiply( String str1, String str2){
        BigDecimal bigDecimal1 = new BigDecimal( Double.valueOf( str1));
        BigDecimal bigDecimal2 = new BigDecimal( Double.valueOf( str1));
        return CustomerStringUtil.bigDecimalToStr( bigDecimal1.multiply( bigDecimal2));
    }

    public static BigDecimal getSingleNotEmptyOrZero( String... strs){
        if( strs == null){
            return new BigDecimal( 0);
        }
        for( String str : strs){
            if( !isEmptyOrZero( str)){
                return new BigDecimal( Double.valueOf( str));
            }
        }
        return new BigDecimal( 0);
    }

    public static BigDecimal strToBigDecimal( String str){
        if( StringUtils.isEmpty( str)){
            return new BigDecimal( 0);
        }
        return new BigDecimal( Double.valueOf( str));
    }

    public static String bigDecimalToStr( BigDecimal number){
        DecimalFormat df = new DecimalFormat( "#.00");
        return df.format( number.add( new BigDecimal( "0.001")));
    }

    public static void main(String[] args) {
        System.out.println( bigDecimalToStr( new BigDecimal( 19.99999999)));
    }
}
